「條件判斷」與「迴圈」是程式語言來控制執行流程的主要方法。我們來看看 C 和 Python 在這兩個流程控制結構的差異。
條件判斷 (Conditional statement)
在 C 語言中,if...else
和 switch...case
都是用來進行條件判斷的控制結構。
可以根據不同的條件執行不同的程式碼區塊。
兩者的比較:
用以下 C 程式來舉例說明:
int x = 5;
int score = 96;
// if-else example:
if (x > 0) {
printf("x 是正值\n");
} else if (x < 0) {
printf("x 是負值\n");
} else {
printf("x 是零\n");
}
if (score >= 90 && score <= 100) { // 邏輯AND運算子(&&)
printf("成績: A\n");
}
// switch example:
switch (x) {
case 1:
printf(" x 是 1\n");
break;
case 2:
printf(" x 是 2\n");
break;
default:
printf(" x 不是 1或2\n");
}
在 Python 中,可以使用 if...elif...else
語句來進行條件判斷。
# if-else example:
x = 5
if x > 0:
print("x 是正值")
elif x < 0:
print("x 是負值")
else:
print("x 是零")
score = 96
if 90 <= score <= 100: # 也可以用 if score >= 90 and score <= 100:
print("成績: A")
switch...case
的語句。不過,Python 3.10 引入了一項名為 Structural Pattern Matching 的新功能。
這 match ... case
語句比 C 語言中的 switch...case
語句更強大,因為它不僅可以根據表達式的值進行匹配,還有更多功能變化,例如模式比對(Structural pattern matching)。
這裡就用以下 Python 程式來簡單說明基本功能。
def buy(thing):
match thing:
case 'apple' | 'banana' | 'orange':
print('It is a fruit.')
return True
# 另外一例:
# 在平面任一點: (0, 0), (3, 6), (3, 0), (0, 6), (3,)
point = (3, 6)
# 表達式是一個(x, y)元組
match point:
case (0, 0):
print("原點")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
print("不是點座標")
注意:C的 switch.. case (常要加上 break) 和Python的 match…case 兩者的流程不一樣。
match 中不會有 Fallthrough (繼續向下) 的情況,也就是一個 case區塊 執行完畢就會離開 match區塊,而不會繼續下一個 case區塊。
注意到上面程式中碼中的最後一個 case,他的 pattern 是個底線 _
,這叫 萬用字元 (wildcard),也就是會 match 所有的情況,當然這個 case 是可省略的。有點類似 C 的 default
。
三元運算子 (Ternary operator)
是一種簡潔表達條件操作的方式,最適合用於簡單的條件表達式。
請注意,不要在複雜的條件下使用,可能導致程式碼變得不易閱讀。
在C語言也稱為條件運算子 (conditional operator),語法是:
condition ?
expression_if_true :
expression_if_false;
變數 = 條件式 ? 表達式1 : 表達式2
舉例:
int a = 6;
int b = 3;
int maxValue = (a > b) ? a : b;
在Python也稱為條件表達式 (conditional expression),語法是:
expression_if_true if
condition else
expression_if_false
變數 = 表達式1 if 條件式 else 表達式2
用以下 Python 程式來舉例說明:
a = 6
b = 3
max_value = a if a > b else b